Graphics rendering generally refers to the process of converting graphical models into a display image. The display image is typically comprised of an array of pixel data, sometimes referred to as a bitmap or pixmap. This array of pixel data maps to picture elements in the display screen of a display device. To display an image, a display controller transfers the pixel data to a display device, where it is used to illuminate the picture elements or "pixels" of a display screen. For example in color images, the pixel data can include red, green and blue color intensity values used to illuminate the pixels of color display screen.
Though there are a variety of display technologies, one of the most widely used is raster display technology. A raster display device includes an array of individual points or picture elements (i.e., pixels), arranged in rows and columns. In a CRT, these pixels correspond to a phosphor array provided on the glass faceplate of the CRT. The emission of light from each phosphor in the array is independently controlled by an electron beam that "scans" the array sequentially, one row at a time, in response to stored intensity values representative of each pixel in the image.
In 3D graphics applications, an object in a scene is represented by a 3D graphical model, which includes geometric data used to model the surface and position of the object, and visual attributes used to model the appearance of the object. There are a number of ways that a geometric model can represent a 3D object, including polygon meshes, parametric surfaces, or quadratic surfaces. Using a polygon mesh, for example, the surface of an object is modeled with several interconnected polygons. The surface elements, in this case polygons, are referred to as geometric primitives. Visual attributes such as red, green, and blue color data, and possibly other model data is stored at the vertices of the polygon.
In a process called scan converting or rasterizing, the geometric primitives forming the surface of the graphical model are converted into an array of discrete pixel data. In the context of 3D graphics, the visible surfaces of the objects in a scene are converted into an array of pixels. For surfaces represented with a mesh of polygons, for example, color intensity values stored at the vertices of each polygon are interpolated to compute intensity values at each of the discrete pixel elements covered by a polygon.
To create more realistic and detailed imagery, interpolated color values alone are not sufficient to create a realistic image. Often, additional image data stored separately from the model must be used to improve image quality. For example, image data referred to as a texture map is often used to represent intricate detail on the surface of a graphical model. In a process called texture mapping, a digital image called a texture map is mapped to the surface of a graphical model. In addition to texture maps, other image data external to the graphical model is sometimes used to compute pixel data. For example color and opacity data is sometimes used to perform lighting and shading operations. As another example, a shadow map is sometimes used to compute shadows cast by objects in a scene.
Texture mapping and other forms of rendering operations that require access to additional image data place tremendous demands on a graphics rendering system. In a typical texture mapping operation, the graphics rendering system has to retrieve at least one sample of texture data to compute each pixel. To generate high quality images without artifacts, the need to retrieve more samples of texture data increases because several texture samples are filtered or re-sampled to compute every pixel.
In real time systems, a new display image must be generated every fraction of a second. This rigorous timing requirement places severe constraints on texture mapping because there is limited time to retrieve texture data. The quality of the final image often suffers because sampling and/or filtering several texture cannot be performed due to the memory bandwidth limitations of the system. Support for high bandwidth access to texture data requires dedicated, fast and expensive memory systems.
A significant side effect of the memory bandwidth problem outlined above is that it makes it difficult, if not impossible, to store texture data in compressed form. Texture data is typically not stored in compressed form because there is not enough time to decompress texture data in a graphics rendering pipeline. As a result, memory requirements to store texture data can be substantial. The need for additional memory adds further to the expense of the system.